package com.example.onenetdht11.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.example.onenetdht11.Contests;
import com.example.onenetdht11.entity.User2;
import com.example.onenetdht11.util.DBOpenHelper;

public class UserDao2 {
    Context context;
    DBOpenHelper dbOpenHelper;
    public UserDao2(Context context) {
        this.context = context;
        this.dbOpenHelper = new DBOpenHelper(this.context,Contests.DATABASE_NAME,null,1);
    }

    /**
     * 连接数据库插入一条只有账户与密码的数据
     * @param user
     * @return
     */
    public long register(User2 user){
        long count = 0;
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        String account = user.getAccount();
        String password = user.getPassword();
        values.put("account",account);
        values.put("password",password);
        values.put("maxtmp",25);
        values.put("mintmp",20);
        count = db.insert(Contests.TABLE_NAME,null,values);
        values.clear();
        db.close();
        return count;
    }

    /**
     * 通过账号密码查询数据库中是否有此账号
     * @param account   账号
     * @param password  密码
     * @return
     */
    public boolean selectByAccount(String account,String password){
        boolean count = false;
        User2 user = new User2();
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        String[] columns = {"account","password"};
        Cursor cursor = db.query(Contests.TABLE_NAME,columns,null,null,null,null,null);
        // 将游标移到开头
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) { // 游标只要不是在最后一行之后，就一直循环
            user.setAccount(cursor.getString(0));
            user.setPassword(cursor.getString(1));
            if (user.getAccount().equals(account)&&user.getPassword().equals(password)){
                count = true;
                break;
            }else
                // 将游标移到下一行
                cursor.moveToNext();
        }

        db.close();
        return count;
    }

    /**
     * 获取用户所有信息
     * @param account   账号
     * @param password  密码
     * @return  此账号密码下的用户信息
     */
    public User2 getUserByAccount(String account,String password){
        User2 user = new User2();
        SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
        //创建游标
        /*
          参数1：table_name
          参数2：columns 要查询出来的列名。相当于 select  *** from table语句中的 ***部分
          参数3：selection 查询条件字句，在条件子句允许使用占位符“?”表示条件值
          参数4：selectionArgs ：对应于 selection参数 占位符的值
          参数5：groupby 相当于 select *** from table where && group by ... 语句中 ... 的部分
          参数6：having 相当于 select *** from table where && group by ...having %%% 语句中 %%% 的部分
          参数7：orderBy ：相当于 select  ***from ？？  where&& group by ...having %%% order by@@语句中的@@ 部分，如： personid desc（按person 降序）
         */
        Cursor cursor = db.query(Contests.TABLE_NAME,null,null,null,null,null,null);
        // 将游标移到开头
        cursor.moveToFirst();
        while (!cursor.isAfterLast()) { // 游标只要不是在最后一行之后，就一直循环
            user.setAccount(cursor.getString(1));
            user.setPassword(cursor.getString(2));
            if (user.getAccount().equals(account)&&user.getPassword().equals(password)){
                user.setId(cursor.getInt(0));
                user.setUsername(cursor.getString(3));
                user.setAge(cursor.getInt(4));
                user.setSex(cursor.getString(5));
                user.setNickname(cursor.getString(6));
                user.setIdcard(cursor.getString(7));
                user.setProvince(cursor.getString(8));
                user.setCounty(cursor.getString(9));
                user.setCity(cursor.getString(10));
                user.setMaxtmp(cursor.getString(11));
                user.setMintmp(cursor.getString(12));
                user.setHaveold(cursor.getString(13));
                user.setHavedisease(cursor.getString(14));
                break;
            }else
                // 将游标移到下一行
                cursor.moveToNext();
        }
        db.close();
        return user;
    }

    /**
     *  更新用户数据
     * @param user   用户类
     */
    public int updateInformationById(User2 user){
        int count = 0;
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues=new ContentValues();
        contentValues.put("username",user.getUsername());
        contentValues.put("age",user.getAge());
        contentValues.put("sex",user.getSex());
        contentValues.put("nickname",user.getNickname());
        contentValues.put("idcard",user.getIdcard());
        contentValues.put("haveold",user.getHaveold());
        contentValues.put("havedisease",user.getHavedisease());

        // 修改数据
        // 参数1：tablename
        // 参数2：修改的值
        // 参数3：修改的条件（SQL where语句）
        // 参数4：表示whereClause语句中的表达式的占位符参数列表，这些字符串会替换where条件中?
        count = db.update(Contests.TABLE_NAME,contentValues,"id=?",new String[]{String.valueOf(user.getId())});

        // 释放连接
        db.close();
        return count;
    }

    public void updateMaxTempById(User2 user){
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues=new ContentValues();
        contentValues.put("maxtmp",user.getMaxtmp());

        // 修改数据
        // 参数1：tablename
        // 参数2：修改的值
        // 参数3：修改的条件（SQL where语句）
        // 参数4：表示whereClause语句中的表达式的占位符参数列表，这些字符串会替换where条件中?
        db.update(Contests.TABLE_NAME,contentValues,"id=?",new String[]{String.valueOf(user.getId())});

        // 释放连接
        db.close();

    }

    public void updateMinTempById(User2 user){
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues=new ContentValues();
        contentValues.put("mintmp",user.getMintmp());

        // 修改数据
        // 参数1：tablename
        // 参数2：修改的值
        // 参数3：修改的条件（SQL where语句）
        // 参数4：表示whereClause语句中的表达式的占位符参数列表，这些字符串会替换where条件中?
        db.update(Contests.TABLE_NAME,contentValues,"id=?",new String[]{String.valueOf(user.getId())});

        // 释放连接
        db.close();
    }

    public void updatePasswordById(User2 user){
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues=new ContentValues();
        contentValues.put("password",user.getPassword());

        // 修改数据
        // 参数1：tablename
        // 参数2：修改的值
        // 参数3：修改的条件（SQL where语句）
        // 参数4：表示whereClause语句中的表达式的占位符参数列表，这些字符串会替换where条件中?
        db.update(Contests.TABLE_NAME,contentValues,"id=?",new String[]{String.valueOf(user.getId())});

        // 释放连接
        db.close();
    }

    public void updateCityById(User2 user){
        // 通过DBHelper类获取一个读写的SQLiteDatabase对象
        SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
        // 创建ContentValue设置参数
        ContentValues contentValues=new ContentValues();
        contentValues.put("city",user.getCity());
        contentValues.put("county",user.getCounty());
        contentValues.put("province",user.getProvince());

        // 修改数据
        // 参数1：tablename
        // 参数2：修改的值
        // 参数3：修改的条件（SQL where语句）
        // 参数4：表示whereClause语句中的表达式的占位符参数列表，这些字符串会替换where条件中?
        db.update(Contests.TABLE_NAME,contentValues,"id=?",new String[]{String.valueOf(user.getId())});

        // 释放连接
        db.close();
    }

}
